<?php
/*
Plugin Name: kMyCollection
Plugin URI: http://www.keasoft.it/blog/
Description: Catalogatore di Film (dvd, vhs, divx), Libri, etc.
Version: 0.6
Author: Kea
Author URI: http://www.keasoft.it/blog/
*/


/*
	Copyright 2007 Manuel Baldassarri (email:kea@keasoft.it)

	This program is free software; you can redistribute it and/or modify
	it under the terms of the GNU General Public License as published by
	the Free Software Foundation; either version 2 of the License, or
	(at your option) any later version.

	This program is distributed in the hope that it will be useful,
	but WITHOUT ANY WARRANTY; without even the implied warranty of
	MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
	GNU General Public License for more details.

	You should have received a copy of the GNU General Public License
	along with this program; if not, write to the Free Software
	Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
*/


define('WP_KMYCOLLECTION_LIST', '<!--kmycollection_list-->');
define('WP_KMYCOLLECTION_ITEM', '<!--kmycollection_item\((\d+)\)-->');
define('WP_KMYDBVERSION', 1.0);

function strip_tags2($string)
{
	$inTag = false;
	for ($i = 0; $i < strlen($string); $i++)
	{
		if ($inTag)
		{
			if ($string[$i] == '>')
				$inTag = false;
		}
		else
		{
			if ($string[$i] != '<')
				$out.= $string[$i];
			else
				$inTag = true;
		}
	}
	return trim(html_entity_decode($out, null, 'UTF-8'));
}


/**
 * kMyCollection permette la gestione di una collezione di Film, libri etc.
 *
 * @author kea
 * @copyright GNU Public licence 2 or any later version
 * @todo aggiungere elimina immagine
 * @todo finire _get_bol, _get_ibs
 * @todo fare altri _get_*
 * @todo sistemare layout visualizzazioni
 * @version 0.6
 */
class kMyCollection {
	// nome della tabella che verrà utilizzata per memorizzare la collezione
	var $tableName;
	// path in cui sono contenute le immagini del plugin
	var $imgPath;
	// path relativo della directory in cui sono contenute/uploadate le cover
	var $uploadPath;
	// lista dei campi della tabella che viene utilizzata per memorizzare la collezione
	var $fields;
	// lista della etichette dei campi della tabella che viene utilizzata per memorizzare la collezione
	var $fieldsLabel;
	// Items per page
 	var $itemsPerPage;
 	// Verifica se siamo nel pannello di amministrazione o in un post
 	var $isManagement = false;
	// visualizza o meno il regista nella lista
	var $showListExtra = false;
 	
	/**
	 * Inizializza le variabili
	 */
	function kMyCollection() {
		global $wpdb;
		$this->tableName = $wpdb->prefix . 'kmc_movies';
		$this->fields = array('id','title','title_original','regia','abstract','publisher','format','color','language','subtitle','durata','image','support','ean');
		$this->fieldsLabel = array('id' => 'id','title' => 'title','title_original' => 'title original','regia' => 'regia','abstract' => 'abstract','publisher' => 'publisher','format' => 'format','color' => 'color','language' => 'language','subtitle' => 'subtitle','durata' => 'durata','image' => 'image','support' => 'support','ean' => 'ean');

		$this->imgPath = get_settings('siteurl').'/wp-content/plugins/kMyCollection/images/';
		$this->uploadPath = get_settings('kmc_coverpath');
 		$this->itemsPerPage = get_settings('kmc_ipp');
 		// @todo da mettere tra le opzioni
 		$this->showListExtra = false;
	}
	
	/**
	 * Aggiunge i menù nell'area amministrativa per la gestione della collezione
	 */
	function addSubMenu() {
		if (function_exists('add_options_page')) {
			add_options_page('MyCollection', 'KMyCollection', 8, basename(__FILE__), array(&$this, 'options'));
		}
		if (function_exists('add_management_page')) {
			add_management_page('MyCollection', 'KMyCollection', 8, basename(__FILE__), array(&$this, 'management'));
		}
	}

	/**
	 * Gestisce la pagina dell'immissione dati
	 */
	function management() {
		global $wpdb;
		$this->isManagement = true;
		$act = 'insert';
		$id = false;
?>
		<div class="wrap">
<?php
	if ($_REQUEST['kmc_action'] == 'update')
	{
		if (empty($_REQUEST['id']))
		{
			echo '<div class="error"><p>'.__("I can't modify record. You should specify Id.")."</p></div>";
		}   // Sei sicuro che vuoi modificare un record? Non mi hai passato l'id!
		else
		{
			$updated = $this->updateItem();
			if ($updated != 0)
			{
				$act = 'update';
				$id = $_REQUEST['id'];
			}
			else
			{
				echo "<div class='error'><p>".__("Id not found")." {$_REQUEST['id']}</p></div>"; // Id non trovato
				$act = 'insert';
				$id = false;
			}
		}
	}
	elseif ($_REQUEST['kmc_action'] == 'ean_search')
	{
		$act = 'update';
		if (empty($_REQUEST['ean_search']))
		{
			echo "<div class='error'><p>".__('You should specify EAN code')."</p></div>"; // Non hai specificato l'ean
		}
		else
		{
			$stored = $this->isEanStored($_REQUEST['ean_search']);
			if (!$stored)
			{
				// @todo selezionare metodo _get da opzioni
				$item = $this->_get_gulliver($_REQUEST['ean_search']);
				if (count($item))
				{
					// Beccato
					$id = $this->addItem($item);
				}
				else
				{
					$item = $this->_get_bol($_REQUEST['ean_search']);
					if (count($item))
					{
						// Beccato
						$id = $this->addItem($item);
					}
					else
					{
						$id = false;
						echo "<div class='error'><p>".__('The item you lookin for is not reachable')."</p></div>";
					}
				}
			}
		}
	}
	elseif ($_REQUEST['kmc_action'] == 'ean_search_file')
	{
		$act = 'update';
		if (empty($_FILES['ean_search_file']))
		{
			echo "<div class='error'><p>".__('You should specify file name')."</p></div>"; // Non hai specificato l'ean
		}
		else
		{
			$id = array();
			$ok = $ko = 0;
			// @todo selezionare metodo _get da opzioni
			$eans = @file($_FILES["ean_search_file"]["tmp_name"]);
			foreach ($eans as $ean)
			{
				$ean = trim($ean);
				if (!empty($ean))
				{
					$stored = $this->isEanStored($ean);
					if (!$stored)
					{
						$item = $this->_get_gulliver($ean);
						if (count($item))
						{
							$id[] = $this->addItem($item);
							$ok++;
						}
						else
						{
							$item = $this->_get_bol($ean);
							if (count($item))
							{
								// Beccato
								$id[] = $this->addItem($item);
								$ok++;
							}
							else
							{
								$id[] = false;
								$ko++;
							}
						}
					}
				}
			}
			echo "<div class='updated'><p>".__('Found')." $ok ".__('items')."</p></div>";
			echo "<div class='error'><p>".__('Not Found')." $ko ".__('items')."</p></div>";
		}
	}
	elseif ($_REQUEST['kmc_action'] == __('Delete'))
	{
		if (empty($_REQUEST['id']))
		{
			echo "<div class='error'><p>".__('You should specify ID to delete')."</p></div>"; //Non hai specificato l'id da cancellare
		}
		else
		{
			$affected_rows = $this->deleteItem($_REQUEST['id']);
			if ($affected_rows != 0)
			{
				$id = false;
				$act = 'insert';
				echo '<div class="updated"><p>'.__('Deleted Successfully').'</p></div>'; //{$_REQUEST['id']}
			}
			else
			{
				$id = $_REQUEST['id'];
				$act = 'update';
				echo '<div class="error"><p>'.__e('Ehm ti sei ricordato il paracadute prima di lanciarti?').'</p></div>';
			}
		}	
	}
	elseif (!empty($_REQUEST['id']))
	{
		$id = $_REQUEST['id'];
		$act = 'update';
	}
?>
		<!-- h2><?php echo $_REQUEST['kmc_action']?></h2 -->
		<h2><?php _e('Add film'); ?></h2>
		<?php $this->editForm($act, $id); ?>
	
		<h2><?php _e('Collection'); ?></h2>
		<?php $this->showList(); ?>
	</div>
<?php
	}
	
	/**
	 * Restituisce un elemento della collezione dato il suo id
	 *
	 * @param int $id Id dell'elemento della collezione
	 * @return object elemento della collezione o false se non esiste l'id
	 */
	function getItem($id) {
		global $wpdb;
		$data = $wpdb->get_results('SELECT * FROM '.$this->tableName." WHERE id = ".$wpdb->escape($id));
		if (count($data) > 0)
			return $data[0];
		else
			return false;
	}
	
	/**
	 * Elimina un elemento della collezione dato il suo id
	 *
	 * @param int $id Id dell'elemento della collezione
	 * @return object elemento della collezione o false se non esiste l'id
	 */
	function deleteItem($id) {
		global $wpdb;
		return $wpdb->query('DELETE FROM '.$this->tableName." WHERE id = ".$wpdb->escape($id));
	}
	
	function isEanStored($ean)
	{
		global $wpdb;
		if (trim($ean) != '')
		{
			$result = $wpdb->get_results('SELECT count(*) AS cnt FROM '.$this->tableName.' WHERE ean = '.$wpdb->escape($ean));
			if ($result[0]->cnt != 0)
			{
?>
			<div class="error">
				<p>
					<?php _e("E' già presente un elemento della collezione con questo EAN:") ?> <?php echo $ean ?>
				</p>
			</div>
<?php
				return true;
			}
			else
			{
				return false;
			}
		}
		return true;
	}
	
	/**
	 * Inserisce un elemento della collezione nel database
	 *
	 * @param array $item elemento della collezione, come chiave i campi del db (es. $item['title'],$item['ean'],...)
	 * @return int l'id dell'inserimento o 0 se fallisce
	 */
	function addItem($item) {
		global $wpdb;
		// verifica la presenza di un altro item con stesso ean
		if ($this->isEanStored($item['kmc_ean']))
			return 0;
		$sqlFields = array();
		$sql = 'INSERT INTO '.$this->tableName.' SET ';
		foreach ($this->fields as $field) {
			if ($field != 'id')
				$sqlFields[] = " $field = '".$wpdb->escape($item['kmc_'.$field])."'";
		}
		$sql.= join(',',$sqlFields);
//		echo $sql;
		$result = $wpdb->query($sql);
		if (($result == 0) || empty($wpdb->insert_id))
		{
			?><div class="error"><p><?php _e('Ops! Distruzione del mondo scampata per un pelo! Ma cosa stavi cercando di inserire?!?! Comunque non ci sei riuscito!') ?></p></div><?php
			return 0;
		}
		else
		{
			?><div class="updated"><p><?php _e('Succesfully insert') ?>: id <?php echo $wpdb->insert_id;?>.</p></div><?php
			return $wpdb->insert_id;
		}
	}
	
	/**
	 * Aggiorna un elemento della collezione nel database
	 *
	 * @param array $item elemento della collezione, come chiave i campi del db (es. $item['title'],$item['ean'],...)
	 * @return int 1 se ha effettuato l'aggiornamento o 0 se fallisce
	 */
	function updateItem($item) {
		global $wpdb;
		$sqlFields = array();
		$sql = 'UPDATE '.$this->tableName.' SET ';
		foreach ($this->fields as $field) {
			if ($field != 'id')
			{
				if (get_magic_quotes_gpc())
					$val = $wpdb->escape(stripcslashes($_REQUEST['kmc_'.$field]));
				else
					$val = $wpdb->escape($_REQUEST['kmc_'.$field]);

				$sqlFields[] = " $field = '$val'";
			}
		}
		$sql.= join(',',$sqlFields).' WHERE id = '.$wpdb->escape($_REQUEST['id']);
		$rows_affected = $wpdb->query($sql);
		// controlla se le rows_affected sono != 0 cioè se ha apportato la modifica
		if ($rows_affected == 0)
		{
			?><div class="error"><p><?php _e('Ops! Distruzione del mondo scampata per un pelo! Ma cosa stavi cercando di aggiornare?!?!<br />Comunque non ci sei riuscito!') ?></p></div><?php
			return 0;
		}
		else
		{
			?><div class="updated"><p><?php _e('Successfully updated') ?></p></div><?php
			return $rows_affected;
		}
	}

	/**
	 * Richiama il record dal DB e stampa il form di modifica dell'elemento della collezione
	 */
	function editForm($action, $id = false) {
		if (!empty($id))
			$data = $this->getItem($id);
		else
			$data = false;
		$this->printEditForm($data, $action);
	}

	/**
	 * Stampa il form di immissione e modifica di un elemento della collezione
	 */
	function printEditForm($data = false, $mode = 'insert') {
		$videoType = array('Dvd','Vhs','DivX');
?>
	<form name="kcollection" id="kcollection" class="wrap" method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
		<input type="hidden" name="kmc_action" value="<?php echo $mode?>">
		<input type="hidden" name="id" value="<?php if ( !empty($data) ) echo $data->id ?>">
		<div id="item_manager">
			<div>
				<fieldset><legend><?php _e('Dati generici'); ?></legend>
					<div style="float:right;text-align:center">
						<?php if (!empty($data) && ($data->image != '')) : ?>
							<img src="<? echo get_settings('siteurl').'/'.$this->uploadPath.$data->image ?>" alt="cover" /><br />
						<?php else : ?>
							<img src="<? echo $this->imgPath.'na.png' ?>" alt="cover" />
						<?php endif; ?>
						<div style="margin:0.5em 0em;">
							<label for="kmc_images_file" style="float:left;show:block;margin-right:1em;width:4em;"><?php _e('Image'); ?></label><br />
							<input type="file" name="kmc_images_file" id="kmc_images_file" class="input" size="15" />
						</div>
					</div>
<?php
	foreach ($this->fields as $field) :
		$strField = 'kmc_'.$field;
?>
<?php 	if ($field == 'abstract') : ?>
					<div style="margin:0.5em 0em;">
						<label for="<?php echo $strField ?>" style="float:left;show:block;margin-right:1em;width:8em;"><?php _e('Abstract'); ?></label>
						<textarea name="<?php echo $strField ?>" id="<?php echo $strField ?>" class="input"><?php if ( !empty($data) ) echo htmlspecialchars($data->abstract); ?></textarea>
					</div>
<?php	elseif ($field == 'support') : ?>
					<div style="margin:0.5em 0em;">
						<label for="<?php echo $strField ?>" style="float:left;show:block;margin-right:1em;width:8em;"><?php _e('Supporto Film'); ?></label>
						<select name="<?php echo $strField ?>" id="<?php echo $strField ?>" class="input">
						<?php foreach ($videoType as $vt) { ?>
							<option <?php if ( !empty($data) && $data->supportType==$vt ) echo 'checked="checked"' ?>><?php _e($vt); ?></option>
						<?php } ?>
						</select>
					</div>
<?php	elseif (($field != 'id') && ($field != 'image')) : ?>
					<div style="margin:0.5em 0em;">
						<label for="<?php echo $strField ?>" style="float:left;show:block;margin-right:1em;width:8em;"><?php _e(ucfirst($this->fieldsLabel[$field])); ?></label>
						<input type="text" name="<?php echo $strField ?>" id="<?php echo $strField ?>" class="input" size="45" value="<?php if ( !empty($data) ) echo htmlspecialchars($data->$field); ?>" />
					</div>
<?php 	endif; ?>
<?php endforeach; ?>
					<!-- div style="margin:0.5em 0em;">
						<label for="kmc_published" style="float:left;show:block;margin-right:1em;width:8em;"><?php _e('Published'); ?></label>
						<input type="radio" name="kmc_published" class="input" value="yes" 
						<?php if ( empty($data) || $data->published=='yes' ) echo "checked" ?>/> <?php _e('Yes'); ?>
						<input type="radio" name="kmc_published" class="input" value="no" 
						<?php if ( !empty($data) && $data->published=='no' ) echo "checked" ?>/> <?php _e('No'); ?>
					</div -->
				</fieldset>
			</div>
			<br />
			<input type="submit" name="save" class="button bold" value="<?php _e('Save'); ?> &raquo;" />
		</div>
		<div style="clear:both; height:1px;">&nbsp;</div>
	</form>
	
	
	<form name="kcollection" id="kcollection" class="wrap" method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>">
		<input type="hidden" name="kmc_action" value="ean_search">
		<div id="item_manager">
			<fieldset><legend><?php _e('Ricerca per EAN'); ?></legend>
				<div>
					<label for="ean_search" style="float:left;show:block;margin-right:1em;width:8em;"><?php _e('Ean'); ?></label>
					<input type="text" name="ean_search" id="ean_search" class="input" size="20" value="">
					<input type="submit" name="search" class="button bold" value="<?php _e('Search'); ?> &raquo;" />
				</div>
			</fieldset>
		</div>
	</form>
	<form name="kcollection" id="kcollection" class="wrap" method="post" action="<?php echo $_SERVER['REQUEST_URI']; ?>" enctype="multipart/form-data">
		<input type="hidden" name="kmc_action" value="ean_search_file">
		<div id="item_manager">
			<fieldset><legend><?php _e('Ricerca per EAN multipla'); ?></legend>
				<div>
					<label for="ean_search" style="float:left;show:block;margin-right:1em;width:8em;"><?php _e('Ean'); ?></label>
					<input type="file" name="ean_search_file" id="ean_search_file" class="input" value="">
					<input type="submit" name="search" class="button bold" value="<?php _e('Search'); ?> &raquo;" />
				</div>
			</fieldset>
		</div>
	</form>
	<?php
	}

	function cleanURI($URI, $toReplace)
	{
		$link = preg_replace("/=$toReplace=\\d+\\&/", '', $URI);
		if ($link == $URI)
			$link = preg_replace("/[\\&\\?]$toReplace=\\d+/", '', $URI);
		return $link;
	}
	
	/**
	 * Visualizza la lista degli elementi della collezione
	 * 
	 * Gestisce anche una ridimentale paginazione
	 *
	 * @param int $nPage numero di pagina da visualizzare
	 */
 	function showList($nPage = 0) {
 		global $wpdb;
 		
 		if (!empty($_REQUEST['kmc_show_id']))
 		{
 			$link = $this->cleanURI($_SERVER['REQUEST_URI'], 'kmc_show_id');
 			if ($item = $this->getItem($_REQUEST['kmc_show_id']))
 				$this->showNormal($item);
 			else
 				echo '<div class="error"><p>'.__("L'id che mi hai passato non esiste").'</div>';
 		}
 		else
 			$link = $_SERVER['REQUEST_URI'];
 		
		if (($nPage == 0) && !empty($_REQUEST['npage']))
			$nPage = $_REQUEST['npage'];
		else
			$nPage = 1;

 		if ($nPage != 1)
 			$offset = ' OFFSET '.($this->itemsPerPage*($nPage-1));
 		else
 			$offset = '';
 		$result = $wpdb->get_results("SELECT * FROM $this->tableName ORDER BY title LIMIT $this->itemsPerPage $offset");
 		$i = 0;
		foreach ($result as $res) {
			$this->showMini($res, ($i++ % 2));
		}
 		$pages = $wpdb->get_var("SELECT count(*) AS cnt FROM $this->tableName");
 		$pages = ceil($pages / $this->itemsPerPage);

 		$link = $this->cleanURI($link,'npage');
 		if (strstr($link,'?'))
 			$link.= '&amp;';
 		else
 			$link.= '?';
?>
		<div class="kmc_pager">
<?php	if ($nPage > 1) : ?>
 			<a href="<?php echo $link.'npage='.($nPage-1); ?>">&#9668;</a>
<?php	else : ?>
			<span>&#9668;</span>
<?php	endif;
		for ($i = 1; $i <= $pages; $i++) :
			if ($i != $nPage) : ?>
				<a href="<?php echo $link.'npage='.$i; ?>"><?php echo $i ?></a>
<?php		else : ?>
				<span><?php echo $i ?></span>
<?php		endif;
		endfor;
		if ($nPage != $pages) : ?>
			<a href="<?php echo $link.'npage='.($nPage+1); ?>">&#9658;</a>
<?php	else : ?>
			<span>&#9658;</span>
<?php	endif; ?>
		</div>

<?php
 	}

 	/**
 	 * Visualizza un record della collezione passato come parametro, visualizzazione minimale
 	 *
 	 * @param object $item record dell'elelemento da visualizzare
 	 */
 	function showMini($item, $even = false) {
 		$link = $this->cleanURI($_SERVER['REQUEST_URI'],'kmc_show_id');
 		if (strstr($link,'?'))
 			$link.= '&amp;';
 		else
 			$link.= '?';
 			
 		$rClass = ($even)?'kmc_even':'kmc_odd';
?>
		<div class="kmc_item_row <?php echo $rClass?>" style="clear:both;">
<?php	if ($this->isManagement) : ?>
			<form action="<?php echo $_SERVER['REQUEST_URI']; ?>" method="post" style="float:left;margin-right:0.5em;">
				<input type="hidden" name="id" value="<?php echo $item->id ?>">
				<input type="image" src="<?php echo $this->imgPath; ?>bin_closed.png" name="kmc_action" value="<?php echo _e('Delete') ?>">
				<input type="image" src="<?php echo $this->imgPath; ?>film_edit.png" name="kmc_action" value="<?php echo _e('Edit') ?>">
			</form>
<?php	endif; ?>
			<a href="<?php echo $link ?>kmc_show_id=<?php echo $item->id; ?>" class="kmc_list">
				<?php echo $item->title;?></a>
<?php	if ($this->showListExtra) : ?>
				[<?php echo $item->regia; ?>]
<?php	endif; ?>
 		</div>
<?php
 	}
 	
 	/**
 	 * Visualizza un record della collezione passato come parametro, visualizzazione completa
 	 *
 	 * @param object $item record dell'elemento da visualizzare
 	 */
 	function showNormal($item) {
 		$first = true;
?>
		<div class="kmc_showNormal">
	<?php if (!empty($item) && ($item->image != '')) : ?>
		<img src="<? echo get_settings('siteurl').'/'.$this->uploadPath.$item->image ?>" alt="cover" class="kmc_cover" />
	<?php else : ?>
		<img src="<? echo $this->imgPath.'na.png' ?>" alt="cover" style="float:right;" />
	<?php endif; ?>

			<table class="kmc_showNormal">
<?php	foreach ($this->fields as $field) : ?>
<?php		if (($field != 'id') && ($field != 'image') && (!empty($item->$field))) : ?>
				<tr>
					<th><?php _e(ucfirst($this->fieldsLabel[$field])); ?></th>
					<td><?php echo $item->$field; ?></td>
				</tr>
<?php 	endif; ?>
<?php endforeach; ?>
			</table>
		</div>
<?php
 	}
 	
 	/**
 	 * Visualizza e gestisce la pagina delle opzioni
 	 *
 	 */
 	function options() {
 		if (!empty($_REQUEST['kmc_ipp']))
 		{
 			$value = (int) $_REQUEST['kmc_ipp'];
			if ( empty($value) ) $value = 1;
			if ( $value < -1 ) $value = abs($value);
 			update_option('kmc_ipp',$value);
 		}
 		if (!empty($_REQUEST['kmc_coverpath']))
 		{
 			$value = $_REQUEST['kmc_coverpath'];
 			if (substr($value,-1,1) != '/')
 				$value.= '/';
 			update_option('kmc_coverpath',$value);
 		}

?>
 		<div class="wrap">
		<h2><?php _e('Opzioni') ?></h2>
		<form method="post" action="<?php $_SERVER['REQUEST_URI'] ?>"> 
			<table class="optiontable"> 
			<tr valign="top"> 
				<th scope="row"><?php _e('Elementi per pagina') ?></th> 
				<td><input name="kmc_ipp" type="text" id="kmc_ipp" value="<?php echo get_settings('kmc_ipp') ?>" size="40" /><br />Elementi per pagina nella lista</td> 
			</tr>
			<tr valign="top"> 
				<th scope="row"><?php _e('Path per memorizzare le copertine') ?></th> 
				<td><input name="kmc_coverpath" type="text" id="kmc_coverpath" value="<?php echo get_settings('kmc_coverpath') ?>" size="40" /></td> 
			</tr>
			</table>
			<p class="submit">
				<input type="submit" name="Submit" value="<?php _e('Update options') ?> &raquo;" />
			</p>
		</form>
<?php
 	}

	function install () {
		global $wpdb;

		$tableName = $this->tableName;
		
		//if($wpdb->get_var("SHOW TABLES LIKE '$tableName'") != $tableName) {
			$sql = "CREATE TABLE " . $tableName . " (
					id mediumint(9) NOT NULL AUTO_INCREMENT,
					ean VARCHAR(64) NOT NULL,
					title VARCHAR(255) NOT NULL,
					title_original VARCHAR(255),
					regia VARCHAR(255),
					abstract text,
					publisher VARCHAR(255),
					format VARCHAR(255),
					color VARCHAR(255),
					language VARCHAR(255),
					subtitle VARCHAR(255),
					durata INT,
					image VARCHAR(255),
					support VARCHAR(255),
					UNIQUE KEY id (id)
					);";

			require_once(ABSPATH . 'wp-admin/upgrade-functions.php');
			dbDelta($sql);
//			$wpdb->query($sql);
			$insert = "INSERT INTO " . $tableName . " (title, abstract) VALUES ('Blade Runner','Fico!');";
			$results = $wpdb->query( $insert );

			// inizializza le opzioni
			update_option('kmc_ipp',10);
			update_option('kmc_coverpath',(get_settings('upload_path').'/dvd/'));

			return $results;
//		}
	}

	/**
	 * Controlla il contenuto della pagina alla ricerca dei tag da sostituire con la collection (lista e/o elemento)
	 * 
	 * Per il momento è possibile avere solo un elemento per ogni post, anche contemporaneamente alla lista
	 *
	 * @param string $content il contenuto della pagina
	 * @return string il contenuto della pagina modificato
	 */
	function parseContent($content) {
		if (preg_match_all("/".WP_KMYCOLLECTION_LIST."/i", $content, $matches) )
		{
			ob_start();
			$this->showList();
			$contents = ob_get_contents();
			ob_end_clean();
			$content = str_replace(WP_KMYCOLLECTION_LIST,$contents,$content);
		}

		if (preg_match_all("/".WP_KMYCOLLECTION_ITEM."/i", $content, $matches) )
		{
			$item = $this->getItem($matches[1][0]);
			if ($item)
			{
				ob_start();
				$this->showNormal($item);
				$contents = ob_get_contents();
				ob_end_clean();
			}
			else
			{
				$contents = '<p>'.__('Che cosa ti sei fumato?').'</p>';
			}
			$content = preg_replace('/'.WP_KMYCOLLECTION_ITEM.'/i',$contents,$content);
		}
		return $content;
 	}
 	
 	/**
 	 * Ricerca la scheda tecnica del dvd su Bol
 	 * 
 	 * Dato il codice EAN del DVD cerca la scheda su Bol.it e ne scarica la scheda tecnica comprendente
 	 * titolo, titolo originale, immagine etc.
 	 * Si occupa anche di memorizzare l'eventuale immagine trovata nella subdir "dvd" della direcory di upload
 	 * definita nelle opzioni di WP
 	 *
 	 * @param string $ean
 	 * @return array il record con la scheda tecnica
 	 */
 	function _get_bol($ean)
 	{
 		$matches = '';
 		$item = array();
 		$apEan = substr($ean,0,-1);
 		$cont = file('http://www.bol.it/video/scheda/ea'.$apEan.'.html');
 		if (count($cont))
 		{
			$page = join($cont);
			preg_match('/<h1[^>]*>([^<]*)<\/h1/i',$page,$matches);
			$item['kmc_title'] = trim($matches[1]);
			preg_match('/Titolo originale :(.*)<br/',$page,$matches);
			$item['kmc_title_original'] = trim(strip_tags2($matches[1]));
			preg_match('/Regia : (.*)<br/',$page,$matches);
			$item['kmc_regia'] = trim(strip_tags2($matches[1]));
 			
			preg_match('/[\w\s](\d?)&nbsp;Min./i',$page,$matches);
			$item['kmc_durata'] = utf8_encode(trim(strip_tags2($matches[1])));
			preg_match('/\|&nbsp;(\d){4}/i',$page,$matches);
			$item['kmc_anno_produzione'] = utf8_encode(trim(strip_tags2($matches[1])));
			preg_match('/Produzione:(.*?)<br/i',$page,$matches);
			$item['kmc_publisher'] = utf8_encode(trim(strip_tags2($matches[1])));
			preg_match('/Sottotitoli:(.*?)<br/i',$page,$matches);
			$item['kmc_subtitle'] = utf8_encode(trim(strip_tags2($matches[1])));
			$item['kmc_ean'] = $ean;
 			
 			if (!empty($item['kmc_title']))
 			{
	 			// Immagine
	 			$content = file_get_contents("http://www.bol.it/bol/includes/tornaImmagine.jsp?cdSoc=BL&ean=$apEan&tipoOggetto=PIB&cdSito=BL&tpPrd=10");
	 			if (!empty($content))
	 			{
	 				$fileName = $this->writeImage($content,$ean);
	 				if ($fileName !== false)
	 					$item['kmc_image'] = $fileName;
	 			}
 			}
 			else
 			{
 				$item = array();
 			}
 		}
 		return $item;
 	}
 	
 	function _get_ibs($ean)
 	{
 		//http://www.internetbookshop.it/dvd/ser/serdsp.asp?shop=&e=8010312039355
 		//img
 		//http://giotto.ibs.it/cop/copdjc.asp?e=8010312039355
 	}
 	
	/**
 	 * Ricerca la scheda tecnica del dvd su GulliverTown.com
 	 * 
 	 * Dato il codice EAN del DVD cerca la scheda su Gulliver e ne scarica la scheda tecnica comprendente
 	 * titolo, titolo originale, immagine etc.
 	 * Si occupa anche di memorizzare l'eventuale immagine trovata nella subdir "dvd" della direcory di upload
 	 * definita nelle opzioni di WP
 	 *
 	 * @param string $ean
 	 * @return array il record con la scheda tecnica
 	 */
 	function _get_gulliver($ean)
 	{
 		$matches = '';
 		$item = array();
 		$apEan = $ean;
 		$cont = @file('http://www.gullivertown.com/dvd/scheda.php?ean='.$apEan);
 		if (count($cont))
 		{
 			$page = join($cont);
 			preg_match('/Titolo:(.*?)<br/i',$page,$matches);
 			$item['kmc_title'] = utf8_encode(trim(strip_tags2($matches[1])));

 			if ($item['kmc_title'] != '')
 			{
	 			preg_match('/Titolo Originale:(.*?)<br/i',$page,$matches);
	 			$item['kmc_title_original'] = utf8_encode(trim(strip_tags2($matches[1])));
	 			preg_match('/Regia:(.*?)<br/i',$page,$matches);
	 			$item['kmc_regia'] = utf8_encode(trim(strip_tags2($matches[1])));
	 			preg_match('/Durata:(.*?)<br/i',$page,$matches);
	 			$item['kmc_durata'] = utf8_encode(trim(strip_tags2($matches[1])));
	 			preg_match('/Anno di produzione:(.*?)<br/i',$page,$matches);
	 			$item['kmc_anno_produzione'] = utf8_encode(trim(strip_tags2($matches[1])));
	 			preg_match('/Produzione:(.*?)<br/i',$page,$matches);
	 			$item['kmc_publisher'] = utf8_encode(trim(strip_tags2($matches[1])));
	 			preg_match('/Sottotitoli:(.*?)<br/i',$page,$matches);
	 			$item['kmc_subtitle'] = utf8_encode(trim(strip_tags2($matches[1])));
	 			$item['kmc_ean'] = $ean;
		 		// Immagine
		 		$content = file_get_contents("http://www.gullivertown.com/dvd/copertine/echo/DL$ean.jpg");
	 			if (!empty($content))
	 			{
	 				$fileName = $this->writeImage($content,$ean);
	 				if ($fileName !== false)
	 					$item['kmc_image'] = $fileName;
	 			}
 			}
 			else
 				return array();
 		}
 		return $item;
 	}
 	
 	function writeImage($content,$ean)
 	{
 		$uploadPath = ABSPATH.$this->uploadPath;
		if (!is_dir($uploadPath))
			if (!mkdir($uploadPath)) {
				echo "<div class='error'><p>".__("Non riesco a creare la directory:")." $uploadPath</p></div>";
				return false;
			}
		$fileName = $ean.'.jpg';

		if (is_writable($uploadPath)) {
			if (!is_file($uploadPath.$fileName) || is_writable($uploadPath.$fileName))
			{
				if (file_put_contents($uploadPath.$fileName,$content) == 0) {
					echo "<div class='error'><p>".__("Non si riesce scrivere il file:")." $uploadPath$fileName</p></div>";
					return false;
				}
			} else {
				echo "<div class='error'><p>".__("Non si riesce scrivere il file:")." $uploadPath$fileName</p></div>";
			}
		} else {
			echo "<div class='error'><p>".__("La directory non è accessibile in scrittura:")." $uploadPath</p></div>";
			return false;
		}
		return $fileName;
 	}
 	
 	
 	function addStyle()
 	{
?>
<link rel="stylesheet" type="text/css" href="<?php echo get_settings('siteurl') ?>/wp-content/plugins/kMyCollection/kMyCollection.css" />
<?php
 	}
}

$kMyCollection = new kMyCollection();
add_action('the_content', array($kMyCollection, 'parseContent'));

add_action('admin_menu', array($kMyCollection, 'addSubMenu'));

add_action('wp_head', array($kMyCollection, 'addStyle'));

if (isset($_GET['activate']) && $_GET['activate'] == 'true')
{
	add_action('init', array($kMyCollection, 'install'));
}

if ( !function_exists('file_put_contents') && !defined('FILE_APPEND') ) {
	define('FILE_APPEND', 1);
	function file_put_contents($n, $d, $flag = false) {
	    $mode = ($flag == FILE_APPEND || strtoupper($flag) == 'FILE_APPEND') ? 'a' : 'w';
	    $f = @fopen($n, $mode);
	    if ($f === false) {
	        return 0;
	    } else {
	        if (is_array($d)) $d = implode($d);
	        $bytes_written = fwrite($f, $d);
	        fclose($f);
	        return $bytes_written;
	    }
	}
}